Some data storage systems attempt to store data segments with no redundancy in order to efficiently use the storage space available. This is particularly applicable for back-up systems. However, there are situations when, either for speed requirements during the writing process or for speed requirements during the reading process, having redundant data segments is useful. During the writing process, there may be too much time involved in establishing whether or not a segment is already stored on the system so that just storing the segment is expedient. One problem is that this could lead to storing some redundant segments. During the reading process, there may be too much retrieval time overhead if the segments being read are stored far from each other. So, in order to make the reading process efficient, all segments likely to be read together should be stored close to each other. This could lead to storing redundant segments. As time passes away from the time that the segments were all stored together, and as files get removed from the system, some segments are no longer referenced, consequently the corresponding redundant segments need not be kept; other duplicate segments provide no additional performance benefits for retrieval. Therefore, it would be useful to be able to manage the redundant segments so that storage space efficiency can be achieved while still maintaining read and write process efficiencies.